home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / zpont311.lha / zpoint-3.11 / Rexx / FilterPuffer.zprx < prev    next >
Text File  |  1995-07-18  |  7KB  |  287 lines

  1. /*
  2.     $VER: FilterPuffer.zprx 1.3 (2.7.95) Copyright (c) Jürgen Kohrmeyer
  3.  
  4.     Dies ist  ein ARexx-Skript für Zodiac's  Point, mit dem  man  einen
  5.     empfangenen  Netcallpuffer  entpacken  und filtern kann. Das Script
  6.     erkennt automatisch  ob der angekommene Puffer ein LhA-Archiv  oder
  7.     ungepackt ist,  entpackt oder  kopiert  diesen  entsprechend in ein
  8.     Verzeichnis 'T:WILAM-04431-92081' und filtert dann alle enthaltenen
  9.     Einzelpuffer.  Die fertig  gefilterten  Puffer werden  im aktuellen
  10.     Verzeichnis unter dem  Namen 'PUFFER' gespeichert. In dieser  Datei
  11.     sind  alle empfangenen Einzelpuffer hintereinandergehängt enthalten
  12.     und können einsortiert werden.
  13.  
  14.     Sie dürfen dieses  Skript beliebig kopieren,  solange  es  zusammen
  15.     mit  Zodiac's  Point  eingesetzt wird,  aber verändern Sie es bitte
  16.     nicht ohne Erlaubnis des Autors.
  17.  
  18.     Sie erreichen den Autor wie folgt:
  19.  
  20.        Jürgen Kohrmeyer       Tel. : +49 5402 5195
  21.        Oststraße 2            EMail: j_kohrmeyer@wilam.north.de
  22.        49143 Bissendorf
  23.  
  24.     Hinweise zur Installation:
  25.  
  26.     Kopieren sie  dieses Skript in  das  Rexx-Verzeichnis  von  ZP  und
  27.     tragen  sie es als Entpacker in Zodiac's Point ein.  Rufen Sie dazu
  28.     'Konfiguration erstellen  oder ändern/Pfade und Kommandos' auf,  im
  29.     Eingabefeld für den 'Entpacker' tragen Sie folgendes ein:
  30.     "SYS:Rexxc/RX Rexx/FilterPuffer.zprx %s %s"
  31. */
  32.  
  33. /*
  34. ** Hier müssen die kompletten Pfade der Packer LHA, LZX und UNZIP
  35. ** eingetragen werden. Für Packer, die nicht verwendet werden, muß
  36. ** nichts angegeben werden. Alle Pfade müssen in Anführungszeichen
  37. ** oder Hochkommas stehen.
  38. ** 
  39. */
  40.  
  41. lha   = 'C:lha'
  42. lzx   = 'C:lzx'
  43. unzip = 'C:unzip'
  44.  
  45.  
  46. /*
  47. ** Hier wird ein Verzeichnis für temporäre Daten angegeben. Auf
  48. ** dem Datenträger, der dieses Verzeichnis enthält muß genügend
  49. ** Speicherplatz für den gesamten, entpackten Puffer vorhanden
  50. ** sein. Der Pfad muß in Anführungszeichen oder Hochkommas stehen.
  51. */
  52.  
  53. tempdir = 'T:'
  54.  
  55.  
  56. /*
  57. ** Beginn des Scripts
  58. */
  59.  
  60. OPTIONS RESULTS
  61. OPTIONS FAILAT 20
  62.  
  63. PARSE ARG archiv screenname
  64.  
  65. IF archiv = '' | screenname = '' THEN
  66.    quit('Format: FilterPuffer <LHa-Archiv oder Pufferdatei> <Name des Public-Screen>',10)
  67.  
  68. IF ~EXISTS(archiv) THEN
  69.    quit('Die Datei' archiv 'existiert nicht!',10)
  70.  
  71. IF ~SHOW(LIBRARIES,'rexxsupport.library') THEN
  72.    IF ~ADDLIB('rexxsupport.library',0,-30,0) THEN
  73.       quit('Kann die <rexxsupport.library> nicht öffnen!',10)
  74.  
  75.  
  76.  
  77. /*
  78. ** Pfad des temporären Verzeichnisses 'tempdir' zusammensetzen
  79. */
  80.  
  81. IF RIGHT(tempdir,1) ~= '/' & RIGHT(tempdir,1) ~= ':' THEN
  82.    tempdir = tempdir||'/WILAM-04431-92081'
  83. ELSE
  84.    tempdir = tempdir||'WILAM-04431-92081'
  85.  
  86.  
  87.  
  88. /*
  89. ** 'tempdir' neu anlegen
  90. */
  91.  
  92. IF EXISTS(tempdir) THEN
  93.    ADDRESS COMMAND 'Delete "'||tempdir||'" ALL QUIET'
  94.  
  95. IF ~MAKEDIR(tempdir) THEN
  96.    quit('Verzeichnis' tempdir 'kann nicht angelegt werden!',10)
  97.  
  98.  
  99.  
  100. /*
  101. ** Pufferdatei öffnen, die ersten 7 Bytes einlesen und wieder schließen
  102. */
  103.  
  104. IF ~OPEN('testfile',archiv,'READ') THEN
  105.    quit('Fehler beim Öffnen der Pufferdatei' archiv||'!',rc)
  106.  
  107. string = READCH('testfile',7)
  108.  
  109. CLOSE('testfile')
  110.  
  111.  
  112.  
  113. /*
  114. ** Überprüfen ob die Pufferdatei mit LHA, LZX oder ZIP gepackt, oder
  115. ** ungepackt ist. Dann entsprechend nach 'tempdir' entpacken oder kopieren.
  116. */
  117.  
  118. SELECT
  119.    WHEN SUBSTR(string,3,3) = '-lh' & DATATYPE(SUBSTR(string,6,1)) = 'NUM' & RIGHT(string,1) = '-' THEN DO
  120.       SAY 'Entpacke LHA-Archiv "'||archiv||'" nach "'||tempdir||'/"'||'0a'x
  121.       ADDRESS COMMAND lha 'x -X' archiv '"'||tempdir||'/"'
  122.    END
  123.  
  124.    WHEN SUBSTR(string,1,3) = 'LZX' THEN DO
  125.       SAY 'Entpacke LZX-Archiv "'||archiv||'" nach "'||tempdir||'/"'||'0a'x
  126.       ADDRESS COMMAND lzx '-X0 x' archiv '"'||tempdir||'/"'
  127.    END
  128.  
  129.    WHEN SUBSTR(string,1,4) = 'PK'||'03'x||'04'x THEN DO
  130.       SAY 'Entpacke ZIP-Archiv "'||archiv||'" nach "'||tempdir||'/"'||'0a'x
  131.  
  132.       olddir=PRAGMA('D',tempdir)
  133.       tarchiv=olddir
  134.  
  135.       IF RIGHT(tarchiv,1) ~= '/' &RIGHT(tarchiv,1) ~= ':' THEN
  136.          tarchiv=tarchiv||'/'
  137.  
  138.       tarchiv=tarchiv||archiv
  139.       IF UPPER(RIGHT(tarchiv,4)) = '.ZIP' THEN
  140.          tarchiv=LEFT(tarchiv,LENGTH(tarchiv)-4)
  141.  
  142.       ADDRESS COMMAND unzip '-x "'||tarchiv||'"'
  143.       olddir=PRAGMA('D',olddir)
  144.    END
  145.  
  146.    OTHERWISE DO
  147.       SAY 'Kopiere "'||archiv||'" nach "'||tempdir||'/'||archiv||'"'
  148.       ADDRESS COMMAND 'copy' archiv '"'||tempdir||'/'||archiv||'"'
  149.    END
  150. END
  151.  
  152. IF rc ~= 0 THEN
  153.    quit('Fehler beim Entpacken/Kopieren der Pufferdatei' archiv||'!',rc)
  154.  
  155. SAY
  156.  
  157.  
  158.  
  159. /*
  160. ** Alle Filenamen auslesen
  161. */
  162.  
  163. filestring = SHOWDIR(tempdir,'FILE')
  164. anzfiles = WORDS(filestring)
  165.  
  166. IF anzfiles = 0 THEN
  167.    quit('Die Pufferdatei enthielt keine Daten!',10)
  168.  
  169.  
  170.  
  171. /*
  172. ** Testen, ob MailFilter gestartet ist. Wenn nicht, dann jetzt starten
  173. */
  174.  
  175. IF ~SHOW(PORTS,'MAILFILTER') THEN DO
  176.    ADDRESS COMMAND
  177.    'run >NIL: <NIL: MAILFILTER:MailFilter'
  178.  
  179.    DO 3 WHILE ~SHOW(PORTS,'MAILFILTER')
  180.       'WaitForPort MAILFILTER'
  181.    END
  182.  
  183.    IF rc = 5 THEN
  184.       quit('Kann MailFilter nicht starten!',10)
  185. END
  186.  
  187.  
  188.  
  189. /*
  190. ** Damit der neue Puffer nicht an eine eventuell bestehende Datei
  191. ** 'PUFFER' angehängt wird, wird diese jetzt gelöscht. Wenn das
  192. ** gerade empfangene Archiv ebenfalls 'PUFFER' heißt wird es nicht
  193. ** gelöscht, sondern in 'PUFFER.old' umbenannt.
  194. */
  195.  
  196. IF EXISTS('PUFFER.old') THEN
  197.    CALL DELETE('PUFFER.old')
  198.  
  199. IF EXISTS('PUFFER') THEN DO
  200.    IF UPPER(archiv) = 'PUFFER' THEN
  201.       CALL RENAME('PUFFER','PUFFER.old')
  202.    ELSE
  203.       CALL DELETE('PUFFER')
  204. END
  205.  
  206.  
  207.  
  208. /*
  209. ** Aktuelles Verzeichnis ermitteln und den Pfad der Datei 'PUFFER'
  210. ** zusammensetzen, weil MailFilter zum Filtern den kompletten Pfad
  211. ** des Zielpuffers benötigt.
  212. */
  213.  
  214. pfad = PRAGMA(D)
  215.  
  216. IF RIGHT(pfad,1) ~= '/' & RIGHT(pfad,1) ~= ':' THEN
  217.    pufferdatei = pfad||'/PUFFER'
  218. ELSE
  219.    pufferdatei = pfad||'PUFFER'
  220.  
  221.  
  222.  
  223. /*
  224. ** Aktuellen ZPoint-Screen einstellen
  225. */
  226.  
  227. ADDRESS MAILFILTER
  228.  
  229. GETATTR screen
  230.  
  231. IF result ~= screenname THEN DO
  232.    DEACTIVATE
  233.    SETATTR screen screenname
  234. END
  235.  
  236.  
  237.  
  238. /*
  239. ** Alle Files aus dem temporären Verzeichnis lesen, filtern und
  240. ** im aktuellen Verzeichnis unter dem Namen 'PUFFER'abspeichern.
  241. */
  242.  
  243. DO i = 1 TO anzfiles
  244.    SAY 'Filtern von' WORD(filestring,i) '...'
  245.    FILTER 'FROM "'||tempdir||'/'||WORD(filestring,i)||'" TO "'||pufferdatei||'" JOIN'
  246.  
  247.    IF rc ~= 0 THEN
  248.       quit('Fehler beim Filtern der Datei' WORD(filestring,i) rc2,rc)
  249. END
  250.  
  251.  
  252.  
  253. /*
  254. ** Einstellungen speichern, damit bei allen verwendeten
  255. ** Filtereinträgen das aktuelle Datum vermerkt wird.
  256. */
  257.  
  258. SAVE
  259.  
  260.  
  261.  
  262. /*
  263. ** 'tempdir' komplett löschen
  264. */
  265.  
  266. ADDRESS COMMAND 'Delete "'||tempdir||'" ALL QUIET'
  267. QUIT FORCE
  268. EXIT(0)
  269.  
  270.  
  271.  
  272. /*
  273. ** Script mit Meldung beenden
  274. */
  275.  
  276. quit:
  277.    PARSE ARG message,rcode
  278.    IF message ~= '' THEN
  279.       SAY message
  280.  
  281.    IF OPEN('con','*','WRITE') THEN DO
  282.       CALL WRITECH('con','0A'x||'Bitte <RETURN> drücken')
  283.       CALL READLN('con')
  284.    END
  285.  
  286.    EXIT(rcode)
  287.